<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    (function () {
        function Observer() {

            //创建一个存储消息类型的对象
            this.obj = {}
            // this.obj = {
            //     'lijiaqi': [ function(){},function(){}, ... ],
            //     'weiya': [ function(){},function(){}, ... ],
            // }

            //订阅消息
            this.on = function (type, handler) { //type:消息类型  handler:保存消息的函数
                // this.obj[type] = (this.obj[type] ? this.obj[type] : [])

                // if(this.obj[type]){
                //     this.obj[type] = this.obj[type]
                // }else{
                //     this.obj[type] = []
                // }

                this.obj[type] = this.obj[type] || []
                this.obj[type].push(handler)
            }

            //发布消息
            this.emit = function (type, msg) {
                // if (this.obj[type]) {
                //     this.obj[type].forEach((item) => {
                //         item(msg)
                //     })
                // }

                this.obj[type] &&
                    this.obj[type].forEach((item) => {
                        item(msg)
                    })
            }
        }
        window.Observer = Observer
    })()

    //实例化对象
    var os = new Observer()

    //订阅消息
    os.on('Tom',function(msg){
        console.log(msg);
    })
    os.on('Tom',function(msg){
        console.log(msg);
    })
    os.on('Tom',function(msg){
        console.log(msg);
    })
    os.on('Susan',function(msg){
        console.log(msg);
    })
    os.on('Susan',function(msg){
        console.log(msg);
    })

    //发布消息
    os.emit('Tom','我喜欢中国')
    os.emit('Susan','我喜欢甘肃')
    os.emit('Daw','我喜欢灵台')
</script>